STM8 Timer 2 und Timer 3

Die Kontroll- und Status Register

Die primäre Funktion der Zähler, sowie die Erzeugung von „Events“ bzw. von Interrupts wird in den nachfolgend beschriebenen Registern eingestellt oder von der Hardware erzeugt.

Das Timer Control Register (TIMn_CR1)

Die grundlegenden Funktionen des Zählers werden im „Control Register“ des jeweiligen Timers„n“ eingestellt.

TIMn_CR1 Register - Control Register 1                                                 (T2 = 0x00.5300h, T3 = 0x00.5320h im STM8S
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
TIMn_CR1 ARPE reserv. reserv. reserv. OPM URS UDIS CEN

HINWEIS:Sollte an dieser Stelle das "Control Register 2" vermisst werden, sei darauf hingewiesen das sowohl im TIMER2 als auch im TIMER3 ein solches Register nicht vorhanden ist.

CEN - Counter Enable Bit (Zählerfreigabe)

Das Counter Enable Bit (CEN) konfiguriert die Freigabe des 16-Bit Zählers. Der Zähler beginnt allerdings erst einen Taktzyklus nach der Freigabe durch das CEN-Bit zu zählen.

Bit 0 = CEN Bit = 0, Zähler ist gesperrt
  = 1, Zähler ist freigegeben und zählt

UDIS– Update Disable Bit (Update Sperre)

Ein “UEV” (Update Event) wird generiert wenn das UDIS Bit auf “0” gesetzt ist und wird unterbunden wenn das UDIS Bit gleich „1“ ist. Auslöser für einen Update Event ist ein Zähler-Überlauf bzw. ein Gleichstand von Zähler und ARR Register oder alternativ ein Schreibvorgang in den Zähler selbst.

Bit 1 = UDIS Bit = 0, Update Event wird generiert.
  = 1, Update Event wird unterbunden.

URS – Update Request Source (Update Modus)

Welche Ereignisse einen mit UDIS freigegebenen Update Event (UIF ) auslösen können ist mit dem URS-Bit defierbar.

Bit 2 = URS Bit = 0, so wird ein Update Event durch Zähler-Überlauf (Zähler > ARR) bzw. durch Setzen des UG-Bits per Software, generiert.
  = 1, so wird der Event nur durch den Register-Update (Überlauf Zähler > ARR) ausgelöst.

OPM – One Puls Mode (Einzel-Puls Modus)

Bit 3 = OPM Bit = 0, der Zähler läuft kontinuierlich weiter.
  = 1, das OPM-Bit wird gesetzt, so stoppt der Zähler beim nächsten Update-Event durch das Zurücksetzen des CEN-Bits.

Achtung:

Sowohl Timer2 als auch Timer3 unterstützen den „One-Puls-Mode“ nicht, da beide Timer keinen Clock/Trigger Controller besitzen (wie z.B. Timer5). Das OPM Bit behält aber die Funktion und kann den Zähler bei einem Update Event durch das Setzen des CEN-Bits anhalten.

ARPE – Auto Reload Preload Enable

Bit 7 = ARPE Bit = 0, Neuer Preload Wert wird unmittelbar übernommen.
  = 1, Neuer Preload Wert wird erst bei einem Update Event in das Arbeitsregister übernommen.

Diese Bit selektiert, wie mit einem neuen Wert der in das Auto-Reload Register geschrieben wurde verfahren wird. Ist das ARPE-Bit gesetzt (ARPE = „1“), dann wird der Wert aus dem Auto-Preload Register erst bei einem Zähler Update aus dem Auto-Preload Register in das „Shadow“-Register übernommen.

D.h. es findet eine Synchronisation mit dem Zählerüberlauf statt. Ist dies nicht gewünscht so kann durch einen Reset des ARPE-Bits der Schreibvorgang des Auto-Reload Registers unmittelbar auf das „Shadow“-Register übertragen werden und die Änderung ist sofort aktiv.

Das Timer Status Register 1 (TIMn_SR1)

Die Aktivitäten der Timer werden über das TIMn_SR1 Status Register 1 dargestellt. Zusätzlich gibt es weitere Flags für die Timer Kanäle im TIMn_SR2, wie im darauf folgenden Punkt beschrieben.

TIMn_SR1 Register - Status Register 1                                                 (T2 = 0x00.5302h, T3 = 0x00.5322h im STM8S )
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit2 Bit 1 Bit 0
TIMn_SR1 reserv. reserv. reserv. reserv. CC3IF CC2IF CC1IF UIF

UIF – Update Interrupt Flag

Bit 0 = UIF Bit = 0, Dieses Bit kann per Software zurückgesetzt werden indem darauf eine „0“ geschrieben wird.
  = 1, wird durch die Hardware gesetzt („1“), wenn ein Update Event (UEV) auftritt und das UDIS Bit im TIMn_CR1 zurückgesetzt ist („0“).

  • UEV durch Zähler Überlauf (Zähler > ARR Register)
  • UEV durch Beschreiben des Zählers per Software
  • CCnIF – Capture/Compare Interrupt Flags

    Die drei Capture/Compare Interrupt Flags beziehen sich auf die Timer-Kanäle, wobei das TIM3IF*) Interrupt Flag nicht genutzt wird (TIM3 hat nur zwei Kanäle).

    Bit [2:0] = CCnIF Bit = 0, Das jeweilige Bit indiziert dass kein aktiver (pending) Interrupt ansteht.
      = 1, wird durch die Hardware gesetzt („1“), wenn ein Interrupt im jeweiligen Timer Kanal auftritt.

    Die CCnIF Bits werden von der Hardware gesetzt wenn ein CC-Event im jeweiligen Kanal auftritt. Je nach Einstellung des jeweiligen Kanals als Eingang (Capture) bzw. als Ausgang (Compare) ist die Bedeutung unterschiedlich (Input Hardware Signal detektiert, Output Compare Register = Zähler). Diese Bits werden über Software zurückgesetzt.

    Das Timer Status Register 2 (TIMn_SR2)

    Die Flags im TIMn_SR2 signalisieren einen CC-Event für einen gültigen „Compare“Vergleich (unter der Voraussetzung dass der Kanal als Ausgang konfiguriert wurde).

    TIMn_SR2 Register - Status Register 2                                                     (T2 = 0x00.5303h, T3 = 0x00.5323h im STM8S )
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit2 Bit 1 Bit 0
    TIMn_SR2 reserv. reserv. reserv. reserv. CC3OF CC2OF CC1OF reserv.

    CCnOF – Capture/Compare Overcapture Flag

    Werden die CC-Interrupts nicht behandelt und ein weiterer CC-Event tritt auf so werden die Flags CCnOF von der Hardware gesetzt. Das Rücksetzen erfolgt über Software.

    Bit [2:0] = CCnOF Bit = 0, Das jeweilige Bit indiziert dass kein Overflow aufgetreten ist. Das Rücksetzten erfolgt über Software.
      = 1, wird durch die Hardware gesetzt („1“), wenn die CC-Interrupts im jeweiligen Timer Kanal nicht bedient wurden und ein weiterer Interupt im gleichen Kanal auftritt.

    Diese Flags werden über Software bei der Behandlung eines CC-Events abgefragt um fehlerhafte Resultate zu vermeiden. Timer3 unterstützt das Flag CC3OF nicht.

    Das Interrupt Enable Register (TIMn_IER)

    Die Timer auf dem STM8 hätten wenig Sinn wenn die erzielten Zeit-Informationen nicht an die eigentliche Anwendung (Software) übermittelt werden könnten. Dies geschieht durch eine Reihe von Interrupts, die durch das TIMn_IER Register freigegeben werden können.

    TIMn_IER Register - Interrupt Enable Register                                    (T2 = 0x00.5301h, T3 = 0x00.5321h im STM8S )
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit2 Bit 1 Bit 0
    TIMn_IER reserv. reserv. reserv. reserv. CC3IE *) CC2IE CC1IE UIE

    Für die Timer 2 und 3 des STM8 stehen folgende Interrupt Quellen zur Verfügung:

    UIE – UpdateInterrupt E nable (Update Interrupt Freigabe)

    Das Setzen („1“) des Update Interrupt Enable Bits UIE im Register TIMn_IER schaltet den „Update“ Interrupt frei. Dieser Interrupt wird generiert wenn eine der folgenden Ursachen auftritt.

  • Zähler Überlauf (Zähler > ARR Register)
  • Beschreiben des Zählers per Software
  • CCnIE – Capture/Compare Interrupt Enable (CC Interrupt Freigabe)

    Die drei Capture/Compare Interrupt Freigabe Bits CCnIE beziehen sich auf die drei Kanäle des Timer 2 wobei für Timer 3 das CC3IE Bit *) nicht relevant ist (nur zwei CC-Kanäle).

    Der jeweilige Interrupt wird freigegeben wenn das entsprechende Bit auf „1“ gesetzt wird. Ist das Bit gleich „0“ ist der Interrupt gesperrt.

    Das Event Generation Register (TIMn_EGR)

    Dieses 8-Bit Register ermöglicht für die 3 (2) Cap/Com –Kanäle einen „Event“ zu generieren falls das jeweilige Bit per Software gesetzt wurde. Die aktivierten Events können als Interrupt weitergeleitet werden wenn das entsprechende Interrupt Enable Bit im TIMn_IER gesetzt wird.

    TIMn_EGR Register - Event Generation Register                                   (T2 = 0x00.5304h, T3 = 0x00.5324h im STM8S )
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIMn_EGR reserv. reserv. reserv. reserv. CC3G *) CC2G CC1G UG

    *) ist im Timer 3 nicht verfügbar, da nur 2 Cap/Com Kanäle

    CC3G – Capture/Compare Event auf Kanal 3 generieren (nur für Timer 2 gültig)

    Ist das Bit CC3G durch Software gesetzt so wird ein Event erzeugt

  • falls der Kanal3 als Ausgang konfiguriert ist und ein Compare auftritt. Das CC3IF Flag im TIMn_SR1 wird gesetzt und falls CC3IE ebenfalls gesetzt ist, wird ein Interrupt erzeugt.
  • falls der Kanal3 als Eingang konfiguriert ist und ein Capture durch ein externes Signal am Timer-Pin auftritt. Dabei wird der aktuelle Zählerstand des Timers in das TIMn_CCR3H und TIMn_CCR3L übernommen und das CC3IF Bit wir gesetzt. Bei freigegebenen CC3IE wird ein Interrupt generiert.
  • Durch die Erzeugung des Events wird das Bit automatisch von der Hardware zurückgesetzt.

    CC2G – Capture/Compare Event Generation auf Kanal 2 generieren (für Timer 2 und 3 gültig)

    Ist das Bit CC2G durch Software gesetzt so wird ein Event erzeugt

  • falls der Kanal2 als Ausgang konfiguriert ist und ein Compare auftritt. Das CC2IF Flag im TIMn_SR1 wird gesetzt und falls CC2IE ebenfalls gesetzt ist wird ein Interrupt erzeugt.
  • falls der Kanal3 als Eingang konfiguriert ist und ein Capture durch ein externes Signal am Timer-Pin auftritt. Dabei wird der aktuelle Zählerstand des Timers in das TIMn_CCR2H und TIMn_CCR2L übernommen und das CC2IF Bit wird gesetzt. Bei freigegebenen CC2IE wird ein Interrupt generiert.
  • Durch das Erzeugen des Events wird das Bit automatisch per Hardware zurückgesetzt.

    CC1G – Capture/Compare Event Generation auf Kanal 2 generieren (für Timer 2 und 3 gültig)

    Ist das Bit CC1G durch Software gesetzt so wird ein Event erzeugt

  • falls der Kanal1 als Ausgang konfiguriert ist und ein Compare auftritt. Das CC1IF Flag im TIMn_SR1 wird gesetzt und falls CC1IE abenfalls gesetzt ist wird ein Interrupt erzeugt.
  • falls der Kanal3 als Eingang konfiguriert ist und ein Capture durch ein externes Signal am Timer-Pin auftritt. Dabei wird der aktuelle Zählerstand des Timers in das TIMn_CCR2H und TIMn_CCR2L übernommen und das CC1IF Bit wir gesetzt. Bei freigegebenen CC1IE wird ein Interrupt generiert.
  • Durch die Erzeugung des Events wird das Bit automatisch per Hardware zurückgesetzt.

    UG – Update Generation Bit

    Das UG Bit wird per Software gesetzt und erzeugt unmittelbar einen Update Event, dabei wird der Zähler des Timers und der Prescaler auf „null“ gesetzt und die Schatten-Register aus den zugehörigen Registern neu geladen. Danach wird das UG Bit durch die Hardware wieder auf „0“ gesetzt.

    Copyright Notiz

    Dieses Dokument sowie dessen Inhalt, insbesondere Texte, Fotografien und Grafiken, unterliegt dem Copyright (© 2017) und sind nur mit einer schriftlicher Zustimmung des Autors, Dipl.Ing.(FH) Franz Henkel zur vollständigen oder auszugsweisen Weiterverwendung in Form einer gedruckten oder elektronischen Kopie oder Replikation bzw. einer vollständigen oder auszugsweisen Bereitstellung des Inhalts in schriftlicher oder elektronischer Form, zu verwenden.